我預計做的是一個很簡易的post/get application,而目前只預計會有4隻極度簡陋的API。
其中HttpPost,將只會限縮在內網(預計使用postman/swagger,前端實在有點障礙),所以對外只會有兩個公開的GET API,權限的部分我就全部省略了(耶),table schema也只會預計有下列這兩張
接著安裝vscode
安裝dotnet core 5.0 sdk
dotnet new WebAPI -o homelabAPI
dotnet add package Microsoft.EntityFrameworkCore --version 5.0.9
dotnet add package Npgsql --version 5.0.7
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 5.0.7
把上面的Table定義成Class Model,設定相關的DBContext與Connection String。
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace homelabAPI
{
public class Posts
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid PostID { get; set; }
[MaxLength(50)]
[Required]
public String Title { get; set;}
public String Content { get; set; }
[MaxLength(50)]
public String Tag { get; set; }
[Required]
public DateTime CreateTime { get; set; }
[Required]
public DateTime ModifyTime { get; set; }
[Required]
public Guid UserID { get; set; }
[ForeignKey("UserID")]
public Users Users {get; set;}
}
}
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace homelabAPI
{
public class Users
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UserID { get; set; }
[MaxLength(20)]
public String Name { get; set; }
[Required]
public DateTime CreateTime { get; set; }
[Required]
public DateTime ModifyTime { get; set; }
}
}
using Microsoft.EntityFrameworkCore;
namespace homelabAPI
{
public class BloggerContext : DbContext
{
public BloggerContext(DbContextOptions<BloggerContext> options): base(options)
{
}
public DbSet<Posts> Posts {get; set;}
public DbSet<Users> Users {get; set;}
}
}
於startup中註冊DBContext的DI服務(預設Lifetime為scope),appsettings放入連線字串。
services.AddDbContext<BloggerContext>(options => options.UseNpgsql("name=ConnectionStrings:DefaultConnection"));
用Code First來把table建起來(先安裝對應的工具才能執行dotnet ef相關指令)
dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet ef migrations add InitialCreate -c BloggerContext
dotnet ef database update
使用pgadmin來看看是不是真的建立成功。
明天就可以來寫個簡單的API了,順便一併上傳git repo。
很久沒寫這些東西了,這次算是簡單的複習了一下。過去IDE的部分都是使用Visual Studio開發,更為無腦簡單。且2-3年前其實也有試著用VS Code開發過 .NET Core 2.0,但實在是有點障礙,不過今時今日試著弄了一下發現比當初友善了好多,Extensions也相當完善,倒是沒有當初那種強烈的障礙感了~